package com.lpx.blog.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;

/**
 * 该枚举类定义的是Result中的一部分参数,包含着响应吗和msg之间的对应关系,后续跟着项目细分化可再添加,一般在全局异常Handler中使用
 */
@Getter // get方法隐藏
public enum ResultStatusEnum implements BaseEnum {
    /**
     * 状态码及对应信息
     */
    //成功状态码
    SUCCESS(200, "请求成功"),
    // 系统错误
    SERVER_ERROR(500, "系统错误"),
    //接口参数错误：1001~1999
    PARAM_IS_INVALID(1001, "参数无效"),
    PARAM_IS_BLANK(1002, "参数为空"),
    PARAM_TYPE_BIND_ERROR(1003, "参数类型错误"),
    OAUTH_TOKEN_FAILURE(2001, "token已失效,请重新登录"),
    OAUTH_TOKEN_MISSING(2002, "token缺失"),
    OAUTH_TOKEN_DENIED(2003, "权限不足"),
    //用户错误：2001~2999
    USER_LOGIN_ERROR(3001, "账号不存在或密码错误"),
    USER_LOCK(3002, "账户已被锁定"),
    USER_ACCOUNT_FORBIDDEN(3003, "账户已被禁用"),
    USER_NOT_EXIST(3004, "用户不存在"),
    USER_REGISTER_EXIST(3005, "用户已存在");


    private final int value;
    @JsonValue // 非数据库中,而是对应的value转化内容
    private final String desc;

    ResultStatusEnum(int value, String desc) {
        this.value = value;
        this.desc = desc;
    }

    @JsonCreator(mode = JsonCreator.Mode.DELEGATING) // // 指定JSON反序列化时使用的函数
    public static ResultStatusEnum of(Integer value) {
        if (value == null) {
            return null;
        }
        for (ResultStatusEnum status : values()) {
            if (status.equalsValue(value)) {
                return status;
            }
        }
        return null;
    }

}